class SystemConfig{
    configForJumpAddr(jumpRule){
        // ---------------- 针对系统类库for循环跳过 --------------------------------
        // jumpRule.addForRunToAddr("libobjc.A.dylib", 0x0, 0x241AC, 0x241C4);
        // jumpRule.addForRunToAddr("libobjc.A.dylib", 0x0, 0x18AC0, 0x18AD0);
        // jumpRule.addForRunToAddr("libobjc.A.dylib", 0x0, 0x18B18, 0x18B2C);
        // jumpRule.addForRunToAddr("libobjc.A.dylib", 0x0, 0x25804, 0x25848);
        // jumpRule.addForRunToAddr("libobjc.A.dylib", 0x0, 0x26F70, 0x26FB4);
        // jumpRule.addForRunToAddr("libobjc.A.dylib", 0x0, 0x202B4, 0x202CC);
        // jumpRule.addForRunToAddr("libobjc.A.dylib", 0x0, 0x2171C, 0x21788);
        // jumpRule.addForRunToAddr("libobjc.A.dylib", 0x0, 0x200AC, 0x200C4);
        // jumpRule.addForRunToAddr("CoreFoundation", 0x0, 0xDF330, 0xDF344);
        // jumpRule.addForRunToAddr("CoreFoundation", 0x0, 0xDF490, 0xDF4A4);
        // jumpRule.addForRunToAddr("CoreFoundation", 0x0, 0xAC364, 0xAC374);
        // jumpRule.addForRunToAddr("libsystem_platform.dylib", 0x0, 0x2608, 0x2624);
        // jumpRule.addForRunToAddr("libsystem_platform.dylib", 0x0, 0x551C, 0x5530);
        // jumpRule.addForRunToAddr("libsystem_platform.dylib", 0x0, 0x26A8, 0x26DC);
        // jumpRule.addForRunToAddr("libsystem_platform.dylib", 0x0, 0x2644, 0x2658);
        // jumpRule.addForRunToAddr("libsystem_platform.dylib", 0x0, 0x26E4, 0x26F8);
        // jumpRule.addForRunToAddr("CoreFoundation", 0x0, 0xDCBC8, 0xDCBDC);
        // jumpRule.addForRunToAddr("libsystem_malloc.dylib", 0x0, 0x17F7C, 0x17F8C);
    }

    configBlackFunc(jumpRule){
        auto addr, name, segName;
        addr = 0;
        for(addr = NextFunction(addr); addr != BADADDR; addr = NextFunction(addr)){
            name = Name(addr);
            segName = SegName(addr);
            if(segName != "__text" && name != "_objc_msgSend" && name != "objc_msgSend"){
                jumpRule.addBlackFunc(name);
            }
        }
    }

    configAddMsgSendBlackFunc(jumpRule){
        // 基础语法
        jumpRule.addMsgSendBlackFunc("lock");
        jumpRule.addMsgSendBlackFunc("init");
        jumpRule.addMsgSendBlackFunc("alloc");
        jumpRule.addMsgSendBlackFunc("invoke");
        jumpRule.addMsgSendBlackFunc("class");
        jumpRule.addMsgSendBlackFunc("sharedInstance");
        jumpRule.addMsgSendBlackFunc("respondsToSelector:");
        jumpRule.addMsgSendBlackFunc("invocationWithMethodSignature:");
        jumpRule.addMsgSendBlackFunc("setTarget:");
        jumpRule.addMsgSendBlackFunc("setSelector:");
        jumpRule.addMsgSendBlackFunc("setArgument:atIndex:");

        // NSBundle
        jumpRule.addMsgSendBlackFunc("mainBundle");
        jumpRule.addMsgSendBlackFunc("bundlePath");

        // NSString
        jumpRule.addMsgSendBlackFunc("stringWithFormat:");
        jumpRule.addMsgSendBlackFunc("length");
        jumpRule.addMsgSendBlackFunc("substringFromIndex:");
        jumpRule.addMsgSendBlackFunc("stringByAppendingString:");
        jumpRule.addMsgSendBlackFunc("hasPrefix:");
        jumpRule.addMsgSendBlackFunc("caseInsensitiveCompare:");
        jumpRule.addMsgSendBlackFunc("substringWithRange:");
        jumpRule.addMsgSendBlackFunc("stringByReplacingPercentEscapesUsingEncoding:");
        jumpRule.addMsgSendBlackFunc("integerValue");
        jumpRule.addMsgSendBlackFunc("UTF8String");

        // NSMutableArray
        jumpRule.addMsgSendBlackFunc("count");
        jumpRule.addMsgSendBlackFunc("addObject");
        jumpRule.addMsgSendBlackFunc("arrayWithCapacity:");
        jumpRule.addMsgSendBlackFunc("arrayWithObjects:count:");
        jumpRule.addMsgSendBlackFunc("arrayWithArray:");
        jumpRule.addMsgSendBlackFunc("containsObject:");
        jumpRule.addMsgSendBlackFunc("objectAtIndex:");
        jumpRule.addMsgSendBlackFunc("addObject:");
        jumpRule.addMsgSendBlackFunc("objectAtIndexedSubscript:");
        jumpRule.addMsgSendBlackFunc("sortedArrayWithOptions:usingComparator:");
        jumpRule.addMsgSendBlackFunc("componentsJoinedByString:");
        
        // JSON
        jumpRule.addMsgSendBlackFunc("dataWithJSONObject:options:error:");
        jumpRule.addMsgSendBlackFunc("JSONObjectWithData:options:error:");

        // NSDate
        jumpRule.addMsgSendBlackFunc("date");
        jumpRule.addMsgSendBlackFunc("timeIntervalSince1970");

        // NSMutableDictionary
        jumpRule.addMsgSendBlackFunc("dictionary");
        jumpRule.addMsgSendBlackFunc("mutableCopy");
        jumpRule.addMsgSendBlackFunc("setObject:forKey:");
        jumpRule.addMsgSendBlackFunc("objectForKeyedSubscript:");
        jumpRule.addMsgSendBlackFunc("setObject:forKeyedSubscript:");
        jumpRule.addMsgSendBlackFunc("keysSortedByValueUsingSelector:");
        jumpRule.addMsgSendBlackFunc("dictionaryWithContentsOfFile:");

        // NSMutableURLRequest
        jumpRule.addMsgSendBlackFunc("valueForHTTPHeaderField:");
        jumpRule.addMsgSendBlackFunc("rangeOfString:options:range:");
        jumpRule.addMsgSendBlackFunc("rangeOfString:");
        jumpRule.addMsgSendBlackFunc("rangeOfString:options:");
        jumpRule.addMsgSendBlackFunc("HTTPBody");
        jumpRule.addMsgSendBlackFunc("URL");
        jumpRule.addMsgSendBlackFunc("setURL:");
        jumpRule.addMsgSendBlackFunc("path");
        jumpRule.addMsgSendBlackFunc("HTTPMethod");
        jumpRule.addMsgSendBlackFunc("host");
        jumpRule.addMsgSendBlackFunc("setHost:");
        jumpRule.addMsgSendBlackFunc("port");
        jumpRule.addMsgSendBlackFunc("setPort:");
        jumpRule.addMsgSendBlackFunc("resourceSpecifier");

        // NSData
        jumpRule.addMsgSendBlackFunc("subdataWithRange:");
        jumpRule.addMsgSendBlackFunc("appendData:");
        jumpRule.addMsgSendBlackFunc("copy");

        // NSNumber
        jumpRule.addMsgSendBlackFunc("numberWithChar:");
        jumpRule.addMsgSendBlackFunc("numberWithUnsignedChar:");
        jumpRule.addMsgSendBlackFunc("numberWithShort:");
        jumpRule.addMsgSendBlackFunc("numberWithUnsignedShort:");
        jumpRule.addMsgSendBlackFunc("numberWithInt:");
        jumpRule.addMsgSendBlackFunc("numberWithUnsignedInt:");
        jumpRule.addMsgSendBlackFunc("numberWithLong:");
        jumpRule.addMsgSendBlackFunc("numberWithUnsignedLong:");
        jumpRule.addMsgSendBlackFunc("numberWithLongLong:");
        jumpRule.addMsgSendBlackFunc("numberWithUnsignedLongLong:");
        jumpRule.addMsgSendBlackFunc("numberWithFloat:");
        jumpRule.addMsgSendBlackFunc("numberWithDouble:");
        jumpRule.addMsgSendBlackFunc("numberWithBool:");
        jumpRule.addMsgSendBlackFunc("numberWithInteger:");
        jumpRule.addMsgSendBlackFunc("numberWithUnsignedInteger:");
        jumpRule.addMsgSendBlackFunc("initWithCoder:");
        jumpRule.addMsgSendBlackFunc("initWithChar:");
        jumpRule.addMsgSendBlackFunc("initWithUnsignedChar:");
        jumpRule.addMsgSendBlackFunc("initWithShort:");
        jumpRule.addMsgSendBlackFunc("initWithUnsignedShort:");
        jumpRule.addMsgSendBlackFunc("initWithInt:");
        jumpRule.addMsgSendBlackFunc("initWithUnsignedInt:");
        jumpRule.addMsgSendBlackFunc("initWithLong:");
        jumpRule.addMsgSendBlackFunc("initWithUnsignedLong:");
        jumpRule.addMsgSendBlackFunc("initWithLongLong:");
        jumpRule.addMsgSendBlackFunc("initWithUnsignedLongLong:");
        jumpRule.addMsgSendBlackFunc("initWithFloat:");
        jumpRule.addMsgSendBlackFunc("initWithDouble:");
        jumpRule.addMsgSendBlackFunc("initWithBool:");
        jumpRule.addMsgSendBlackFunc("initWithInteger:");
        jumpRule.addMsgSendBlackFunc("initWithUnsignedInteger:");


       
        jumpRule.addMsgSendBlackFunc("dataUsingEncoding:");
        jumpRule.addMsgSendBlackFunc("isNil:");
        jumpRule.addMsgSendBlackFunc("initWithData:encoding:");
        jumpRule.addMsgSendBlackFunc("startUpdatingLocation");
        
        
    }

    
}